home *** CD-ROM | disk | FTP | other *** search
/ CD Ware Multimedia 1994 November / Cd Ware (Nro. 2) - Epimundo.iso / DOS / GA / AO.ZIP / AO.ASM next >
Encoding:
Assembly Source File  |  1994-05-16  |  4.2 KB  |  294 lines

  1.  
  2.         title        -  Animated "o" system program
  3.  
  4. vectors     segment at 0
  5.         ORG    8h*4
  6. timer    label    dword
  7.         ORG    16h*4
  8. kbio    label    dword
  9. vectors     ends
  10.  
  11. cseg        segment para
  12.         assume    cs:cseg
  13.         org    100h
  14.  
  15. begin:        jmp    init_vectors        ; go initialize vectors
  16.  
  17.  
  18. ;-------------------------------;
  19. ;                ;
  20. ;  data area for this program    ;
  21. ;                ;
  22. ;-------------------------------;
  23.  
  24. last_stat    db    0ffh
  25. old_timer    dd    ?
  26. old_kbio    dd    ?
  27. timer_tick    db    0
  28. in_kbio        db    0
  29. which        db    0
  30. csize        db    10h
  31. o_table:
  32.     db    00000000b
  33.     db    00000000b
  34.     db    00000000b
  35.     db    00000000b
  36.     db    00000000b
  37.     db    00110000b
  38.     db    01100000b
  39.     db    11000000b
  40.     db    11000110b
  41.     db    11000110b
  42.     db    01101100b
  43.     db    00111000b
  44.     db    00000000b
  45.     db    00000000b
  46.     db    00000000b
  47.     db    00000000b
  48.  
  49.     db    00000000b
  50.     db    00000000b
  51.     db    00000000b
  52.     db    00000000b
  53.     db    00000000b
  54.     db    00111000b
  55.     db    01101100b
  56.     db    11000000b
  57.     db    11000000b
  58.     db    11000000b
  59.     db    01101100b
  60.     db    00111000b
  61.     db    00000000b
  62.     db    00000000b
  63.     db    00000000b
  64.     db    00000000b
  65.  
  66.     db    00000000b
  67.     db    00000000b
  68.     db    00000000b
  69.     db    00000000b
  70.     db    00000000b
  71.     db    00111000b
  72.     db    01101100b
  73.     db    11000110b
  74.     db    11000110b
  75.     db    11000000b
  76.     db    01100000b
  77.     db    00110000b
  78.     db    00000000b
  79.     db    00000000b
  80.     db    00000000b
  81.     db    00000000b
  82.  
  83.     db    00000000b
  84.     db    00000000b
  85.     db    00000000b
  86.     db    00000000b
  87.     db    00000000b
  88.     db    00111000b
  89.     db    01101100b
  90.     db    11000110b
  91.     db    11000110b
  92.     db    11000110b
  93.     db    01000100b
  94.     db    00000000b
  95.     db    00000000b
  96.     db    00000000b
  97.     db    00000000b
  98.     db    00000000b
  99.  
  100.     db    00000000b
  101.     db    00000000b
  102.     db    00000000b
  103.     db    00000000b
  104.     db    00000000b
  105.     db    00111000b
  106.     db    01101100b
  107.     db    11000110b
  108.     db    11000110b
  109.     db    00000110b
  110.     db    00001100b
  111.     db    00011000b
  112.     db    00000000b
  113.     db    00000000b
  114.     db    00000000b
  115.     db    00000000b
  116.  
  117.     db    00000000b
  118.     db    00000000b
  119.     db    00000000b
  120.     db    00000000b
  121.     db    00000000b
  122.     db    00111000b
  123.     db    01101100b
  124.     db    00000110b
  125.     db    00000110b
  126.     db    00000110b
  127.     db    01101100b
  128.     db    00111000b
  129.     db    00000000b
  130.     db    00000000b
  131.     db    00000000b
  132.     db    00000000b
  133.  
  134.     db    00000000b
  135.     db    00000000b
  136.     db    00000000b
  137.     db    00000000b
  138.     db    00000000b
  139.     db    00011000b
  140.     db    00001100b
  141.     db    00000110b
  142.     db    11000110b
  143.     db    11000110b
  144.     db    01101100b
  145.     db    00111000b
  146.     db    00000000b
  147.     db    00000000b
  148.     db    00000000b
  149.     db    00000000b
  150.  
  151.     db    00000000b
  152.     db    00000000b
  153.     db    00000000b
  154.     db    00000000b
  155.     db    00000000b
  156.     db    00000000b
  157.     db    01000100b
  158.     db    11000110b
  159.     db    11000110b
  160.     db    11000110b
  161.     db    01101100b
  162.     db    00111000b
  163.     db    00000000b
  164.     db    00000000b
  165.     db    00000000b
  166.     db    00000000b
  167.  
  168.  
  169. intercept    proc    far
  170.         pushf
  171.         cmp    timer_tick,0
  172.         je    dont_do_this
  173.         cmp    in_kbio,1
  174.         ja    dont_do_this
  175.         cmp    ah,1
  176.         je    do_this
  177.         cmp    ah,11h
  178.         je    do_this
  179. dont_do_this:
  180.         jmp    go_kbio1
  181. do_this:
  182.         mov    timer_tick,0
  183.         inc    in_kbio
  184.         push    es
  185.         push    ds
  186.         push    si
  187.         push    di
  188.         push    bp
  189.         push    ax
  190.         push    bx
  191.         push    cx
  192.         push    dx
  193.  
  194.         mov    ax,040h
  195.         mov    es,ax
  196.  
  197.         mov    al,es:[84h]
  198.         cmp    al,24
  199.         jne    go_kbio
  200.         mov    al,es:[49h]
  201.         cmp    al,3
  202.         jne    go_kbio
  203.  
  204.         mov    dx,es:[63h]
  205.         add    dl,6
  206. ;        in    al,dx
  207. ;        test    al,8
  208. ;        jz    updating
  209. ;        test    last_stat,8
  210. ;        jz    now
  211. ;        jmp    go_kbio
  212. updating:
  213.         nop
  214.         nop
  215.         cli
  216.         in    al,dx
  217.         test    al,8
  218.         jnz    now
  219.         sti
  220.         jmp    updating
  221. now:
  222. ;        mov    last_stat,al
  223.         push    dx
  224.         mov    al,which
  225.         inc    al
  226.         and    al,7
  227.         mov    which,al
  228.         mul    csize
  229.         mov    bp,offset o_table
  230.         add    bp,ax
  231.         mov    ax,cs
  232.         mov    es,ax
  233.         mov    ax,01100h
  234.         mov    bh,0eh        ; Character height
  235.         mov    bl,0
  236.         mov    cx,1
  237.         mov    dx,06fh
  238.         int    10h
  239.         pop    dx
  240. ;        in    al,dx
  241. ;        mov    last_stat,al
  242. go_kbio:
  243.         pop    dx
  244.         pop    cx
  245.         pop    bx
  246.         pop    ax
  247.         pop    bp
  248.         pop    di
  249.         pop    si
  250.         pop    ds
  251.         pop    es
  252.         dec    in_kbio
  253. go_kbio1:
  254.         popf
  255.         jmp    old_kbio
  256. intercept     endp
  257.  
  258. new_timer    proc    far
  259.         mov    timer_tick,1
  260.         jmp    old_timer
  261. new_timer    endp
  262.  
  263. init_vectors    proc    near
  264.         assume    ds:vectors
  265.         mov    ax,vectors
  266.         mov    ds,ax
  267.  
  268.         cli
  269.         mov    ax,word ptr timer
  270.         mov    word ptr old_timer,ax
  271.         mov    ax,word ptr timer[2]
  272.         mov    word ptr old_timer[2],ax
  273.         mov    ax, offset new_timer
  274.         mov    word ptr timer,ax
  275.         mov    word ptr timer[2],cs
  276.  
  277.         mov    ax,word ptr kbio
  278.         mov    word ptr old_kbio,ax
  279.         mov    ax,word ptr kbio[2]
  280.         mov    word ptr old_kbio[2],ax
  281.         mov    ax, offset intercept
  282.         mov    word ptr kbio,ax
  283.         mov    word ptr kbio[2],cs
  284.         sti
  285.  
  286.         mov    dx,offset init_vectors        ; end of resident portion
  287.         int    27h
  288. init_vectors    endp
  289.  
  290. cseg           ends
  291.  
  292.         END    begin
  293.  
  294.